package com.code.p9.代理模式.静态代理;


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
 * 描述: 动态代理类
 *
 * @author CodeYang_Site
 * @version 2021/6/7 0:52
 */
public class DynamicProxy<T> {
    /**
     * 手写JDK的动态代理
     *
     * @param loader
     * @param interfaces
     * @param <T>
     * @return
     */
    public static <T> T newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler handler) {
        //寻找JoinPoint连接点，AOP框架使用元数据定义
        if (true) {
            //执行一个前置通知
            new BeforeAdvice().exec();
        }
        //执行目标，并返回结果
        return (T) Proxy.newProxyInstance(loader, interfaces, handler);
    }

    /**
     * 要实现动态代理的首要条件是：被代理类必须实现一个接口，回想一下前面的分
     * 析吧。当然了，现在也有很多技术如CGLIB可以实现不需要接口也可以实现动态代理的方
     * 式。
     */

}
